// -*- mode: c -*-

digraph modules_memnotify
{
  fontsize=6;
  ranksep=0.2;
  nodesep=0.2;

  edge[fontsize=6];
  edge[arrowsize=0.4];

  node[width=0.001]
  node[height=0.001]
  node[fontsize=6]
  node[shape=box];
  node[style=filled];
  node[fillcolor=wheat];

  compound = true;

  /* - - - - - - - - - - - - - - - - - - - *
   * data storage
   * - - - - - - - - - - - - - - - - - - - */

  node[fillcolor=wheat];
  MN_DEV;
  LIMITS;
  STATUS;
  LEVEL;
  DBUS1[label=DBUS];
  DBUS2[label=DBUS];
  SETTINGS;

  /* - - - - - - - - - - - - - - - - - - - *
   * data process
   * - - - - - - - - - - - - - - - - - - - */

  node[fillcolor=yellow];
  node[shape=oval];

  KERNEL;
  IOWATCH [label="handle\ninput\n"];
  EVALUATE [label="evaluate\nlevel\n"];
  BROADCAST [label="broadcast\nlevel\nchange\n"];
  QUERY [label="handle\nlevel\nquery\n"];
  NOTIFY[label="change\nslimits\n"];
  GCONF;

  /* - - - - - - - - - - - - - - - - - - - *
   * data flow
   * - - - - - - - - - - - - - - - - - - - */

  node[fillcolor=pink];
  node[shape=box];

  KERNEL -> MN_DEV [dir=both];
  MN_DEV -> IOWATCH [dir=both];
  IOWATCH -> STATUS;
  STATUS -> EVALUATE;
  LIMITS -> EVALUATE;
  EVALUATE -> LEVEL;
  LEVEL -> BROADCAST;

  QUERY -> DBUS2 [dir=both];
  LEVEL -> QUERY;

  SETTINGS -> NOTIFY;
  NOTIFY -> LIMITS;
  NOTIFY -> STATUS;
  MN_DEV -> NOTIFY;
  GCONF -> SETTINGS;

  /* - - - - - - - - - - - - - - - - - - - *
   * control flow
   * - - - - - - - - - - - - - - - - - - - */

  edge[style=dotted];

  IOWATCH -> EVALUATE;
  KERNEL -> IOWATCH;
  EVALUATE -> BROADCAST;
  BROADCAST -> DBUS1;
  NOTIFY -> EVALUATE;
  GCONF -> NOTIFY;
}
